Лабораторные работы / отчёт 14
.docxФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
“ОМСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ”
Кафедра “Информатика и вычислительная техника”
ОТЧЕТ
по лабораторной работе №14
“ДИНАМИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ. СПИСКИ”
Выполнил:
Студент группы ИВТ-234 Бектимиров А.Е.
_____________________________________________________
(дата, подпись)
Проверил:
ст. пр. доцент Дорошенко М.С.
_____________________________________________________
(дата, подпись)
Омск 2024
Лабораторная работа №14
Тема: Динамические структуры данных. Списки
Вариант 2
Задание 1
Условие задачи:
Используя динамическую структуру список, проверить, является ли он упорядоченным набором чисел.
Схема алгоритма:
Текст программы:
#include <iostream>
using namespace std;
struct Node {
int data;
Node* next;
};
void insert(Node*& head, int num) {
Node* newNode = new Node;
newNode->data = num;
newNode->next = nullptr;
if (head == nullptr) {
head = newNode;
}
else {
Node* temp = head;
while (temp->next != nullptr) {
temp = temp->next;
}
temp->next = newNode;
}
}
bool isSorted(Node* head) {
Node* temp = head;
while (temp->next != nullptr) {
if (temp->data > temp->next->data) {
return false;
}
temp = temp->next;
}
return true;
}
int main() {
setlocale(LC_ALL, "RUS");
Node* head = nullptr;
int num;
char choice;
do {
cout << "Введите число: ";
cin >> num;
insert(head, num);
cout << "Вы хотите добавить ещё числа в список? (y/n): ";
cin >> choice;
} while (choice == 'y');
if (isSorted(head)) {
cout << "Заданный список является упорядоченным набором чисел." << endl;
}
else {
cout << "Заданный список не является упорядоченным набором чисел." << endl;
}
return 0;
}
Результаты выполнения программы:
Задание 2
Условие задачи:
Реализовать задачу с использованием другой динамической структуры или придумать свою задачу, написать и отладить для нее программу.
Схема алгоритма:
Текст программы:
#include <iostream>
#include <queue>
using namespace std;
bool isOrdered(queue<int>& q) {
bool isAscending = true;
bool isDescending = true;
if (q.empty()) {
return true;
}
int prev = q.front();
q.pop();
while (!q.empty()) {
int curr = q.front();
q.pop();
if (curr < prev) {
isAscending = false;
}
if (curr > prev) {
isDescending = false;
}
prev = curr;
}
return isAscending || isDescending;
}
int main() {
setlocale(LC_ALL, "RUS");
queue<int> numbers;
int num;
cout << "Введите последовательность цифр (-1 - \"стоп\"): ";
while (true) {
cin >> num;
if (num == -1) {
break;
}
numbers.push(num);
}
if (isOrdered(numbers)) {
cout << "Последовательность ввода упорядочена." << endl;
}
else {
cout << "Последовательность ввода не упорядочена." << endl;
}
return 0;
}
Результаты выполнения программы: